﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

using Model;

namespace Controller
{
    public class Controller
    {
        public Bruger loginBruger;

        BrugerCollection brugerCol = new BrugerCollection();
        ProjektCollection projektCol = new ProjektCollection();
        TimerCollection timerCol = new TimerCollection();
        Bruger aktuelBruger;
        Projekt aktuelprojekt;
        KontraktCollection kontraktCol = new KontraktCollection();

        public Controller()
        {
            OpretHardCoded();
        }


        private void OpretHardCoded()
        {
            OpretBruger("Hans Hansen", "1234", true, "hans@hansen.com", 10203040, "Nørregade 20", 5000, "Odense C", true, 121245785421, 1234, "Freelance");
            OpretBruger("Jens Hansen", "5678", false, "jens@bruger.com", 12124545, "Vestergade 15", 5000, "Odense C", true, 7531598745, 5000, "Freelance");

            OpretKontrakt(0, "- NA");
            OpretKontrakt(110, "Freelance");
            OpretKontrakt(145, "Timelønnet, kontor, basis");
            OpretKontrakt(358, "Timelønnet, kontor, leder");
        }


        #region bruger

        // kalder BrugerCollection og opretter brugeren. returnere den oprettede bruger.
        public int OpretBruger(string navn, string password, bool administrator, string email,
            int telefonnr, string adresse, int postnr, string by, bool aktiv, Int64 kontonr, int regnr, string kontraktType)
        {
            Bruger nyBruger = brugerCol.OpretBruger(navn, password, administrator, email, telefonnr, adresse, postnr, by, aktiv, kontonr, regnr, kontraktType);
            return nyBruger.personID;
        }

        public Bruger RetBruger(int personID, string navn, string adresse, int postnr, string by, string email,
                                int telefonnr, string password, Int64 kontonr, int regnr, bool administrator, bool aktiv, string kontraktType)
        {
            return brugerCol.RetBruger(personID, navn, adresse, postnr, by, email, telefonnr, password, kontonr, regnr, administrator, aktiv, kontraktType);
        }

        // kalder BrugerCollection og finder brugeren, returnere object med brugeren som blev fundet
        public Bruger FindBruger(int personID)
        {
            return brugerCol.FindBruger(personID);
        }

        public void BrugerLogin(string email, string pass)
        {
            loginBruger = brugerCol.BrugerLogin(email, pass);
        }

        // Henter alle brugere.
        public List<Bruger> VisBrugere()
        {
            return brugerCol.VisBrugere();
        }
        
        #endregion

        #region projekt

        public int OpretNyProjekt(string projektnavn, DateTime projektstart, DateTime projektslut)
        {
            return projektCol.OpretNyProjekt(projektnavn, projektstart, projektslut);
        }

        
        public List<Projekt> VisProjekter()
        {
            return projektCol.projekter;
        }

        public Projekt FindProjekt(int projektNr)
        {
            return projektCol.FindProjekt(projektNr);
        }

        public Projekt RetProjekt(string projektnavn, DateTime projektstart, DateTime projektslut, int projektnummer)

        {
            return projektCol.RetProjekt(projektnavn, projektstart, projektslut, projektnummer);
        }

        public bool SletProjekt(int projektnummer)
        {
            return projektCol.SletProjekt(projektnummer);
        }

        #endregion 

        // Registrer timer i TimerCollection - returnere den registrede tid.
        public Timer RegistrerTimer(DateTime timeStart, DateTime timeSlut, DateTime dato, Bruger bruger, Projekt projekt, string kommentar,
                     bool timeGodkendelse, bool timeUdbetalt)
        {
            return timerCol.RegistrerTimer(timeStart, timeSlut, dato, bruger, projekt, kommentar, timeGodkendelse, timeUdbetalt);
        }
        public void udvælgprojekt(int projektnummer)
        {
            aktuelprojekt = projektCol.FindProjekt(projektnummer);
        }

        public void TilknytBrugerTilProjekt(Bruger bruger, Projekt projekt)
        {
            projektCol.TilknytBrugerTilProjekt(bruger, projekt);
            TilknytProjektTilBruger(bruger, projekt);
        }

        public void TilknytProjektTilBruger(Bruger bruger, Projekt projekt)
        {
            brugerCol.TilknytBrugerTilProjekt(bruger, projekt);
        }

        #region kontrakt

        public Kontrakt FindKontrakt(int kontraktNr)
        {
            return kontraktCol.FindKontrakt(kontraktNr);
        }

        public int OpretKontrakt(Decimal timeLøn, string kontraktType)
        {
            return kontraktCol.OpretKontrakt(timeLøn, kontraktType);
        }

        public List<Kontrakt> VisKontrakter()
        {
            return kontraktCol.VisKontrakter();
        }

        #endregion
    }
}